/**
 * LittleJS Module Export
 */

export
{
    // Engine
    engineName,
    engineVersion,
    frameRate,
    timeDelta,
    engineObjects,
    frame,
    time,
    timeReal,
    paused,
    getPaused,
    setPaused,
    engineInit,
    engineObjectsUpdate,
    engineObjectsDestroy,
    engineObjectsCollect,
    engineObjectsCallback,
    engineObjectsRaycast,
    engineAddPlugin,

    // Globals
    debug,
    debugOverlay,
    debugWatermark,

    // Debug
    ASSERT,
    LOG,
    debugRect,
    debugPoly,
    debugCircle,
    debugPoint,
    debugLine,
    debugOverlap,
    debugText,
    debugClear,
    debugScreenshot,
    debugShowErrors,
    debugVideoCaptureStart,
    debugVideoCaptureStop,
    debugVideoCaptureIsActive,

    // Settings
    cameraPos,
    cameraAngle,
    cameraScale,
    canvasColorTiles,
    canvasClearColor,
    canvasMaxSize,
    canvasMinAspect,
    canvasMaxAspect,
    canvasFixedSize,
    canvasPixelated,
    tilesPixelated,
    fontDefault,
    showSplashScreen,
    headlessMode,
    tileDefaultSize,
    tileDefaultPadding,
    tileDefaultBleed,
    enablePhysicsSolver,
    objectDefaultMass,
    objectDefaultDamping,
    objectDefaultAngleDamping,
    objectDefaultRestitution,
    objectDefaultFriction,
    objectMaxSpeed,
    gravity,
    particleEmitRateScale,
    glEnable,
    gamepadsEnable,
    gamepadDirectionEmulateStick,
    inputWASDEmulateDirection,
    touchGamepadEnable,
    touchGamepadCenterButton,
    touchGamepadAnalog,
    touchGamepadSize,
    touchGamepadAlpha,
    vibrateEnable,
    soundEnable,
    soundVolume,
    soundDefaultRange,
    soundDefaultTaper,
    medalDisplayTime,
    medalDisplaySlideTime,
    medalDisplaySize,

    // Setters for globals
    setCameraPos,
    setCameraAngle,
    setCameraScale,
    setCanvasColorTiles,
    setCanvasClearColor,
    setCanvasMaxSize,
    setCanvasMinAspect,
    setCanvasMaxAspect,
    setCanvasFixedSize,
    setCanvasPixelated,
    setTilesPixelated,
    setFontDefault,
    setShowSplashScreen,
    setHeadlessMode,
    setGLEnable,
    setTileDefaultSize,
    setTileDefaultPadding,
    setTileDefaultBleed,
    setEnablePhysicsSolver,
    setObjectDefaultMass,
    setObjectDefaultDamping,
    setObjectDefaultAngleDamping,
    setObjectDefaultRestitution,
    setObjectDefaultFriction,
    setObjectMaxSpeed,
    setGravity,
    setParticleEmitRateScale,
    setTouchInputEnable,
    setGamepadsEnable,
    setGamepadDirectionEmulateStick,
    setInputWASDEmulateDirection,
    setTouchGamepadEnable,
    setTouchGamepadCenterButton,
    setTouchGamepadButtonCount,
    setTouchGamepadAnalog,
    setTouchGamepadSize,
    setTouchGamepadAlpha,
    setVibrateEnable,
    setSoundEnable,
    setSoundVolume,
    setSoundDefaultRange,
    setSoundDefaultTaper,
    setMedalDisplayTime,
    setMedalDisplaySlideTime,
    setMedalDisplaySize,
    setMedalsPreventUnlock,
    setDebugWatermark,
    setDebugKey,

    // Math
    PI,
    abs,
    floor,
    ceil,
    round,
    min,
    max,
    sign,
    hypot,
    log2,
    sin,
    cos,
    tan,
    atan2,
    mod,
    clamp,
    percent,
    distanceWrap,
    lerpWrap,
    distanceAngle,
    lerpAngle,
    lerp,
    smoothStep,
    nearestPowerOfTwo,
    isOverlapping,
    isIntersecting,
    wave,

    // Utilities
    formatTime,
    fetchJSON,
    saveText,
    saveCanvas,
    saveDataURL,
    shareURL,
    readSaveData,
    writeSaveData,

    // Random
    rand,
    randInt,
    randBool,
    randSign,
    randInCircle,
    randVec2,
    randColor,

    // Utility Classes
    RandomGenerator,
    Vector2,
    Color,
    Timer,
    vec2,
    rgb,
    hsl,
    isColor,
    isVector2,
    isNumber,
    isString,
    isArray,

    // Default Colors
    WHITE,
    CLEAR_WHITE,
    BLACK,
    CLEAR_BLACK,
    GRAY,
    RED,
    ORANGE,
    YELLOW,
    GREEN,
    CYAN,
    BLUE,
    PURPLE,
    MAGENTA,

    // Draw
    tile,
    TileInfo,
    TextureInfo,
    mainCanvas,
    mainContext,
    drawContext,
    workCanvas,
    workContext,
    workReadCanvas,
    workReadContext,
    mainCanvasSize,
    textureInfos,
    drawCount,
    screenToWorld,
    worldToScreen,
    screenToWorldDelta,
    worldToScreenDelta,
    screenToWorldTransform,
    drawTile,
    drawRect,
    drawRectGradient,
    drawLineList,
    drawLine,
    drawPoly,
    drawEllipse,
    drawCircle,
    drawCanvas2D,
    drawText,
    drawTextScreen,
    setBlendMode,
    combineCanvases,
    engineFontImage,
    FontImage,
    isFullscreen,
    toggleFullscreen,
    setCursor,
    getCameraSize,

    // WebGL
    glCanvas,
    glContext,
    glAntialias,
    glClearCanvas,
    glSetTexture,
    glCompileShader,
    glCreateProgram,
    glCreateTexture,
    glDeleteTexture,
    glSetTextureData,
    glFlush,
    glCopyToContext,
    glSetAntialias,
    glDraw,
    glDrawPointsTransform,
    glDrawOutlineTransform,
    glDrawPoints,
    glDrawColoredPoints,
    glSetRenderTarget,
    glClearRect,

    // Input
    keyIsDown,
    keyWasPressed,
    keyWasReleased,
    keyDirection,
    inputClear,
    inputClearKey,
    mouseIsDown,
    mouseWasPressed,
    mouseWasReleased,
    mousePos,
    mousePosScreen,
    mouseDelta,
    mouseDeltaScreen,
    mouseWheel,
    mouseInWindow,
    isUsingGamepad,
    inputPreventDefault,
    gamepadPrimary,
    isTouchDevice,
    setInputPreventDefault,
    gamepadIsDown,
    gamepadWasPressed,
    gamepadWasReleased,
    gamepadStick,
    gamepadDpad,
    gamepadConnected,
    vibrate,
    vibrateStop,
    pointerLockRequest,
    pointerLockExit,
    pointerLockIsActive,

    // Audio
    audioContext,
    audioMasterGain,
    audioDefaultSampleRate,
    Sound,
    SoundInstance,
    speak,
    speakStop,
    getNoteFrequency,
    playSamples,
    zzfx,
    zzfxG,

    // Base Object
    EngineObject,

    // Tiles
    tileCollisionLayers,
    tileCollisionGetData,
    tileCollisionTest,
    tileCollisionRaycast,
    tileLayersLoad,
    TileLayerData,
    CanvasLayer,
    TileLayer,
    TileCollisionLayer,

    // Particles
    ParticleEmitter,
    Particle,

    // Medals
    medals,
    medalsPreventUnlock,
    medalsInit,
    Medal,
}